Package servlets

Source Code of servlets.BookHotel

/**
* The Hotel Book Reservation Page
* An Customer can make a reservation for a hotel room
* @author Morozan Ion & Sandu Andreea
*/
package servlets;

import classes.DAO;
import classes.HotelReservation;
import java.io.IOException;
import java.util.regex.Pattern;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import java.io.StringReader;
import javax.servlet.http.HttpSession;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;

public class BookHotel extends HttpServlet {

    /* Those are the fields req for making a reservation
     * id of the reservation, name, email, checkin, checkout
     */
    private String Rid;
    private String Rstart;
    private String Rend;
    private String RroomId;
    private String RnrOfPers;
    private String Rdesc;
    private String Rname;
    private String Remail;

    /**
     * Handles the HTTP <code>GET</code> method.
     * @param req servlet request
     * @param resp servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        getServletContext().getRequestDispatcher("/WEB-INF/bookHotel.jsp").forward(req, resp);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String checkin = request.getParameter("adate");
        String checkout = request.getParameter("ddate");
        String name = request.getParameter("name");
        String email = request.getParameter("email");
        String room_id = request.getParameter("rooms_id");


        /* instance of database */
        DAO dao = DAO.getInstance();


        /* test if the req fields are filled */
        if (name.isEmpty() || email.isEmpty()) {
            /* sent error  message if not */
            request.setAttribute("errorMessage", "<font size=\"3\" "
                    + "face=\"arial\" color=\"red\">"
                    + "You must fill all fields!");
            RequestDispatcher rd = request.getRequestDispatcher("bookHotel.jsp");
            rd.forward(request, response);
            /* verify if the email address is in a correct format*/
        } else if (!rfc2822.matcher(email).matches()) {
            request.setAttribute("errorMessage", "<font size=\"3\" "
                    + "face=\"arial\" color=\"red\">"
                    + "Invalid email address!");
            RequestDispatcher rd = request.getRequestDispatcher("bookHotel.jsp");
            rd.forward(request, response);
        } else {
            /* POST method */

            /*erase all the whiteSpaces*/
            String auxName = name;
            /* create the query link */
            String link = "http://mdwhotel.appspot.com/api/v1/reservation?start=";
            link += checkin + "&end=" + checkout + "&room_id=" + room_id
                    + "&username=" + auxName.replaceAll(" ", "") + "&email=" + email;

            Client client = Client.create();
            WebResource webResource = client.resource(link);
            webResource.accept("application/xml");
            String resp = webResource.post(String.class);

            /*parsing the String to XML format and extract important fields*/
            StringToXML(resp);

            /* getting the session information to find out the current user*/
            HttpSession session = request.getSession(false);
            String username = (String) session.getAttribute("username");
            String cityTo = (String) session.getAttribute("cityTo");

            /* if it's not the Guest user than the reservation made by an
             * autenthicate user will be saved in our local DB if there are
             * available rooms
             * !Guest customer cannot modify their reservations
             */
            if (username != null) {
                HotelReservation HR = new HotelReservation(Rid, Rstart, Rend,
                                                           RroomId, RnrOfPers, Rdesc, name, Remail, username, cityTo);
                dao.put(HR);
            }
            RequestDispatcher rd = request.getRequestDispatcher("reservationSuccessful.jsp");
            rd.forward(request, response);
            response.sendRedirect("reservationSuccessful.jsp");
        }

    }
    /* email verification */
    private static final Pattern rfc2822 = Pattern.compile(
            "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"
            + "(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$");

    /**
     * Parse the xml file and extract the desired fields
     * @param xmlString = xml file receive from the remote application
     */
    protected void StringToXML(String xmlString) {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder;
        try {

            builder = factory.newDocumentBuilder();
            // Use String reader
            Document doc = builder.parse(new InputSource(new StringReader(xmlString)));

            doc.getDocumentElement().normalize();
            NodeList nList = doc.getElementsByTagName("reservation");

            for (int temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;

                    Rid = getTagValue("id", eElement);
                    Rstart = getTagValue("start", eElement);
                    Rend = getTagValue("end", eElement);
                    RroomId = getTagValue("roomId", eElement);
                    RnrOfPers = getTagValue("nrOfPersons", eElement);
                    Rdesc = getTagValue("description", eElement);
                    Rname = getTagValue("username", eElement);
                    Remail = getTagValue("email", eElement);
                }
            }
        } catch (Exception e) {
            System.out.println("Eroare la parsare XML ");
        }
    }

    /*
     * Extract the Tag and what contains
     */
    private static String getTagValue(String sTag, Element eElement) {
        NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

        Node nValue = (Node) nlList.item(0);

        return nValue.getNodeValue();
    }
}
TOP

Related Classes of servlets.BookHotel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.